﻿// 魔法药水 POTION.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>

using namespace std;
/*
https://algospot.com/judge/problem/read/POTION
问题：
在魔法药水课上，哈利不小心在打盹时错误地将一些成分放入了锅中。赫敏察觉到药水的颜色变化异常，迅速告诉了正确的配方，避免了完全毁掉药水。
现在他需要快速添加更多的成分来完成药水。

这次制作的魔法药水需要使用n种成分，每种成分需要ri汤匙。如果将所有成分都正确添加，制作出来的魔法药水将正好是一瓶。
哈利已经将每种成分的数量pi放入了锅中。哈利希望通过适当地添加最少量的成分来准确匹配每种成分的比例。
为此，可以制作多于一瓶的药水，但至少要制作一瓶。由于哈利只能以汤匙为单位添加成分，因此无法添加半勺的成分或类似操作。

请编写一个程序来计算需要添加的每种成分的最小量。

输入：
输入的第一行是测试用例的数量c（c <= 50）。每个测试用例由三行组成。第一行是成分的数量n（1 <= n <= 200）；
接下来一行包含n个整数，表示每种成分所需的数量ri（1 <= ri <= 1000）；
然后一行包含n个整数，表示已经放入锅中的成分数量pi（0 <= pi <= 1000）。

输出：
对于每个测试用例，输出一行，包含n个整数，表示需要添加的每种成分的数量。

示例输入：
3
4
4 6 2 4
6 4 2 4
4
4 6 2 4
7 4 2 4
3
4 5 6
1 2 3

示例输出：
0 5 1 2
1 8 2 4
3 3 3
*/

int T;
const int N = 1010;
int a[N], b[N];
int n;

int gcd(int a, int b) {
	if (b == 0) return a;
	return gcd(b, a % b);
}


void solve() {
	int g = 0;
	for (int i = 0; i < n; i++) {
		g = gcd(g, a[i]);
	}
	for (int i = 0; i < n; i++) {
		a[i] = a[i] / g;
	}

	int fan = 1;
	for (int i = 0; i < n; i++) {
		fan = max(fan, b[i] / a[i] + (b[i] % a[i] ? 1:0));
	}

	for (int i = 0; i < n; i++) {
		a[i] = a[i] * fan;
	}

	for (int i = 0; i < n; i++) {
		cout << a[i] - b[i] << " ";
	}
	cout << endl;


	return;
}



int main()
{
	cin >> T;
	while (T--) {
		cin >> n;
		for (int i = 0; i < n; i++) {
			cin >> a[i];
		}
		for (int i = 0; i < n; i++) {
			cin >> b[i];
		}
		solve();
	}

	return 0;
}

 